在前幾天,我們透過指令成功添加了兩台 Worker 節點,與一台 Master 節點一同構成了一個 Cluster。在開發或部署專案時,通常會將它們部署到同一個 Cluster 中,由 Cluster 中的所有節點共同分擔工作。
當我們有多個專案需要區分開發環境和生產環境,或者有多個專案需要同時開發時,將它們混在一起管理可能會變得不便。使用 Cluster 進行管理又稍顯繁瑣,因為需要重複將節點添加到新的 Cluster 中。為了解決這個問題,就有了 Namespace,它可以建立一個虛擬的小 Cluster,方便我們進行管理。
在 Kubernetes 中,我們可以使用 Namespace 為專案建立一個獨立的區域。這樣,即使我們同時使用多個專案,也可以透過 Namespace 區分各個專案的資源,避免在更動時不小心影響到不屬於它的東西。而 Label 和 Annotations 則用於為專案中的各種資源添加標記,例如開發版本或其他相關標記。兩者之間的區別在於,Label 主要提供給 Kubernetes 內部使用,讓各種資源可以相互連結;而 Annotations 則是給開發者閱讀的。
這篇文章將先介紹如何建立 Namespace,而 Label 和 Annotations 則會在之後介紹各個資源時一併說明。
Kubernetes 安裝完成後,預設會有 4 個 Namespace:
1.default
預設的 Namespace 名稱為 default,若沒有特別指定 Namespace,則所有資源都會在這個 Namespace 中。
2.kube-system
Kubernetes 中特殊的資源通常存放在 kube-system Namespace 中,這些資源與 Kubernetes 系統相關。
3.kube-public
kube-public Namespace 中存放可被所有使用者讀取的資源,通常也與系統相關。
4.kube-node-lease
這個 Namespace 主要存放與節點有關的資源,用於檢測節點是否故障。
談到了預設的 Namespace,接下來我們看看如何建立自己的 Namespace。
# 在 Master 節點上執行以下指令
kubectl create namespace <namespace_name>
# 範例
kubectl create namespace k8s-test
需要注意的是,Namespace 和 Label 都有命名規則,必須遵從以下三點:
名稱最多不超過 63 個字符。
只能包含數字、小寫字母和連字符(Dash)。
名稱必須以數字或小寫字母開頭和結尾。
創建完成後,我們可以查看新建的 Namespace,使用以下指令:
kubectl get namespace
# 或者
kubectl get ns
接下來,我們可以設定我們的預設 Namespace,這樣我們就不用擔心忘記指定 Namespace,將資源放到錯誤的 Namespace 中。
kubectl config set-context --current --namespace=<insert-namespace-name-here>
切換完成後,可以使用以下指令來驗證:
# 驗證
kubectl config view --minify | grep namespace:
如果我們想刪除某個 Namespace,也很簡單:
# 在 Master 節點上執行以下指令
$ kubectl delete namespace <namespace_name>
# 範例
$ kubectl delete namespace k8s-test
這樣就完成了刪除。
如需更詳細的內容,可以參考官方文件Namespace的部分。